package _tema6;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class PanelControlServidor extends JFrame {

	private static final long serialVersionUID = 1L;
	private MenuItem mniIniciarServicio;
	private MenuItem mniDetenerServicio;
	private MenuItem mniFinalizar;
	private JTextArea jtaMensajes; 
	private JLabel jlbMensajesComp;
	
	private Servidor servidor;

	public PanelControlServidor(){
		this.componentes();
		this.propiedades();
		
	}
	
	public void propiedades(){
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setTitle("Servidor");
		this.setVisible(true);
		this.addWindowListener(new WindowAdapter(){
			@Override
			public void windowClosing(WindowEvent e) {
				servidor.shutdown();
			}
		});
		this.pack();
	}
	
	
	
	
	public void componentes(){
		MenuBar mnb = new MenuBar();
		Menu mn = new Menu("Archivo");
		mnb.add(mn);
		this.setMenuBar(mnb);
		/* Creamos los MenuItems*/
		this.mniIniciarServicio = new MenuItem("Iniciar Servicio");
		this.mniDetenerServicio = new MenuItem("Detener Servicio");
		this.mniFinalizar 		= new MenuItem("Finalizar");
		this.mniDetenerServicio.setEnabled(false);
		mn.add(this.mniIniciarServicio);
		mn.add(this.mniDetenerServicio);
		mn.add(this.mniFinalizar);
		/*Incorporamos los Listeners a los MenuItems*/
		this.mniIniciarServicio.addActionListener(new IniciarServicioActionListener(this));
		this.mniDetenerServicio.addActionListener(new DetenerServicioActionListener(this));
		this.mniFinalizar.addActionListener(new FinalizarActionListener(this));		
		/*Creamos la JTextArea*/
		this.jtaMensajes = new JTextArea(15,40);
		/*Creamos un JScrollPane para contener a la Jta*/
		JScrollPane jspMensajes = new JScrollPane(this.jtaMensajes,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
		/* Creamos el JLabel para mensajes complementarios */
		this.jlbMensajesComp = new JLabel(" ");
		/* Creamos el JPanel para que contenga al JLabel */
		JPanel jpMensajesComp = new JPanel();
		jpMensajesComp.setLayout(new GridLayout(1,1));
		jpMensajesComp.setBorder(BorderFactory.createLineBorder(Color.GRAY));
		jpMensajesComp.add(this.jlbMensajesComp);
		/* Obtenemos el contenedor principal */
		Container c = this.getContentPane();
		c.setLayout(new BorderLayout());
		c.add(jspMensajes,BorderLayout.CENTER);
		c.add(jpMensajesComp,BorderLayout.SOUTH);
	}

	public void jtaAppendText(String text){
		this.jtaMensajes.append(text);
		
	}
	
	public void mostrarMensajeComplementario(String msg){
		this.jlbMensajesComp.setText(msg);
	}
	
	public void cambiarEstadoServicio(boolean status) {
		this.mniIniciarServicio.setEnabled(!status);
		this.mniDetenerServicio.setEnabled(status);
		this.mostrarMensajeComplementario((status)?("Servicio Iniciado"):("Servicio Detenido"));
	}
	
	
	public class IniciarServicioActionListener implements ActionListener {
		private PanelControlServidor view;
		
		public IniciarServicioActionListener(PanelControlServidor view) {
			this.view = view;	
		}

		public void actionPerformed(ActionEvent arg0) {
			this.view.servidor = new Servidor(this.view,7920,10);
			this.view.servidor.start();
		}
	
	}
	public class DetenerServicioActionListener implements ActionListener{
		private PanelControlServidor view;

		
		public DetenerServicioActionListener(PanelControlServidor view) {
			this.view = view;
		}

		public void actionPerformed(ActionEvent e) {
			this.view.servidor.shutdown();	
		}
	
	}
	public class FinalizarActionListener implements ActionListener{


		public FinalizarActionListener(PanelControlServidor view) {

		}

		public void actionPerformed(ActionEvent e) {
			System.exit(0);	
			
		}
	}
	
	public static void main(String[] args) {
			new PanelControlServidor().setVisible(true);
	}

}
